#ifndef __STATE_MANAGE_H__
#define __STATE_MANAGE_H__

/**
 * @brief WIoTa状态枚举
 *
 */
typedef enum
{
    WIOTA_OFFLINE = 0, /**< 离线 */
    WIOTA_ONLINE       /**< 在线 */
} wiota_state_e;

/**
 * @brief MQTT状态枚举
 *
 */
typedef enum
{
    MQTT_STATE_OFFLINE = 0, /**< 离线 */
    MQTT_STATE_ONLINE = 1   /**< 在线 */
} mqtt_state_e;

/**
 * @brief 网络获取网关信息状态枚举
 *
 */
typedef enum
{
    GET_INFO_DEFAULT = 0, /**< 默认状态 */
    GET_INFO_WAIT = 1,    /**< 等待上报，如果WIoTa启动比mqtt连接快，则为该状态 */
    GET_INFO_SUC = 2      /**< 已经获取成功状态 */
} get_info_state_e;

/**
 * @brief user id管理模块初始化状态枚举
 *
 */
typedef enum
{
    USERID_MANAGE_DEFAULT = 0, /**< 默认状态，未初始化 */
    USERID_MANAGE_INIT         /**< 初始化完成 */
} userid_manager_state_e;

/**
 * @brief 网关状态结构体
 *
 */
typedef struct
{
    mqtt_state_e mqtt_state;             /**< mqtt状态 */
    wiota_state_e wiota_state;           /**< WIoTa状态 */
    get_info_state_e get_info_state;     /**< 络获取网关信息状态 */
    userid_manager_state_e userid_state; /**< user id管理模块初始化状态 */
    int scan_freq_state;                 /**< 扫频状态 */
} manager_state_t;

/**
 * @brief 获取MQTT状态
 *
 * @return mqtt_state_e MQTT状态
 */
mqtt_state_e manager_get_mqtt_state(void);

/**
 * @brief 设置MQTT状态
 *
 * @param mqtt_state MQTT状态
 */
void manager_set_mqtt_state(mqtt_state_e mqtt_state);

/**
 * @brief 获取WIoTa状态
 *
 * @return wiota_state_e WIoTa状态
 */
wiota_state_e manager_get_wiota_state(void);

/**
 * @brief 设置WIoTa状态
 *
 * @param wiota_state WIoTa状态
 */
void manager_set_wiota_state(wiota_state_e wiota_state);

/**
 * @brief 获取启动信息上报状态
 *
 * @return get_info_state_e 启动信息上报状态
 */
get_info_state_e manager_get_startup_info_state(void);
/**
 * @brief 设置启动信息上报状态
 *
 * @param info_state 启动信息上报状态
 */
void manager_set_startup_info_state(get_info_state_e info_state);

/**
 * @brief  获取userid管理模块初始化状态
 *
 * @return userid_manager_state_e serid管理模块初始化状态
 */
userid_manager_state_e manager_get_userid_manager_state(void);

/**
 * @brief 设置userid管理模块初始化状态
 *
 * @param userid_state userid管理模块初始化状态
 */
void manager_set_userid_manager_state(userid_manager_state_e userid_state);

/**
 * @brief 获取扫频状态
 *
 * @return int 1表示正常扫频，0表示未在扫频
 */
int manager_get_scan_freq_state(void);

/**
 * @brief 设置扫频状态
 *
 * @param state 1表示正常扫频，0表示未在扫频
 */
void manager_set_scan_freq_state(int state);

#endif /* __STATE_MANAGE_H__ */
